home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Tools 3
/
Amiga Tools 3.iso
/
programming
/
colpectius1
/
plasma.amos
/
plasma.amosSourceCode
Wrap
AMOS Source Code
|
1993-08-18
|
3KB
|
93 lines
' Plasma
' ~~~~~~
' by Ben Wyatt, bwyatt@paston.co.uk
' Creates highy attractive random plasma patterns :)
' Uses very long variable names for no reason :-\
Degree
Randomize Timer
Screen Open 0,320,256,16,Lowres
Screen Display 0,128,37,320,256
Flash Off : Curs Off : Cls 0
_PLASMA[Rnd(9)+1,32,256,Rnd(32),Rnd(32),1]
Screen 0 : Get Palette(1)
_COPYACROSS[0,0,320,256,32,256,1,0]
Screen Close 1
Screen 0
' Create some nice fading effects
Repeat
SPD=1+Rnd(7)
Gosub 0+Rnd(5)
CN=0
Repeat
MK=Mouse Key
Inc CN
Wait Vbl
Until MK or CN>SPD*16
Until MK
Direct
0 Fade SPD,$0,$10,$20,$30,$40,$50,$60,$70,$80,$90,$A0,$B0,$C0,$D0,$E0,$F0 : Return
1 Fade SPD,$0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$A,$B,$C,$D,$E,$F : Return
2 Fade SPD,$F,$1F,$2F,$3F,$4F,$5F,$6F,$7F,$8F,$9F,$AF,$BF,$CF,$DF,$EF,$FF : Return
3 Fade SPD,$0,$100,$200,$300,$400,$500,$600,$700,$800,$900,$A00,$B00,$C00,$D00,$E00,$F00 : Return
4 Fade SPD,$F,$10F,$20F,$30F,$40F,$50F,$60F,$70F,$80F,$90F,$A0F,$B0F,$C0F,$D0F,$E0F,$F0F : Return
5 Fade SPD,$F0,$1F0,$2F0,$3F0,$4F0,$5F0,$6F0,$7F0,$8F0,$9F0,$AF0,$BF0,$CF0,$DF0,$EF0,$FF0 : Return
Procedure _PLASMA[WIDTHOFBARS,PATTERNWIDTH,PATTERNHEIGHT,XSIZE,YSIZE,SPSCREEN]
' Draws a plasma, the parameters:
' WIDTHOFBARS - the width of each of the bars
' PATTERNWIDTH - width of the pattern
' PATTERNHEIGHT - height of the pattern
' XSIZE - amount it wobbles it across (in pixels)
' YSIZE - amount it wobbles it down (in pixels)
' SPSCREEN - the number of an undefined screen (spare)
Screen Open SPSCREEN,PATTERNWIDTH*4,PATTERNHEIGHT+PATTERNWIDTH*2,16,Lowres
Screen Display SPSCREEN,152,37,PATTERNWIDTH,PATTERNHEIGHT
Flash Off : Curs Off : Cls 0
Palette $0,$10,$20,$30,$40,$50,$60,$70,$80,$90,$A0,$B0,$C0,$D0,$E0,$F0
' You might prefer to have a screen hide here...
Screen Offset SPSCREEN,PATTERNWIDTH,PATTERNWIDTH
I=0 : D=1
For Y=0 To PATTERNHEIGHT+PATTERNWIDTH*2 Step WIDTHOFBARS
Add I,D
If I=15 : D=-1 : End If
If I=0 : D=1 : End If
Cls I,0,YP To 320,Y
YP=Y
Next Y
' Wobble it across
For X=1 To 319
Screen Copy SPSCREEN,0,0,1,PATTERNHEIGHT+PATTERNWIDTH*2 To SPSCREEN,X,Cos((X*360)/PATTERNWIDTH)*XSIZE
Next X
' Wobble it down :)
For Y=0 To PATTERNHEIGHT+PATTERNWIDTH*2-1
Screen Copy SPSCREEN,0,Y+1,319,Y+2 To SPSCREEN,Sin((Y*360)/PATTERNHEIGHT)*YSIZE,Y
Next Y
End Proc
Procedure _COPYACROSS[X1,Y1,X2,Y2,PATTERNWIDTH,PATTERNHEIGHT,SPSCREEN,DESTSCREEN]
' Copy the plasma across the screen, parameters:
' X1,Y1,X2,Y2 - area to be filled with the plasma
' PATTERNWIDTH - the width of the pattern
' PATTERNHEIGHT - the height of the pattern
' SPSCREEN - screen number of the plasma
' DESTSCREEN - destination screen for the plasma to be copied to
For X=X1 To X2 Step PATTERNWIDTH
Screen Copy SPSCREEN,PATTERNWIDTH,PATTERNWIDTH,2*PATTERNWIDTH,PATTERNWIDTH+Y2-Y1 To DESTSCREEN,X,Y1
Next X
End Proc